﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Odbc;

namespace WindowsFormsApplication1
{
    class DBConnection
    {
        private System.Data.Odbc.OdbcConnection m_ODBCConnection;
        private System.Data.Odbc.OdbcCommand m_ODBCCommand;
        private System.Data.Odbc.OdbcDataReader m_ODBCResult;

        // Opens a database connection using pre-defined settings
        // TODO: Tutaj musimy zrobic jakis sensowniejszy system. Ustawienia zapisywane w szyfrowanym pliku,
        //       albo coś w ten deseń. Może jakiś przycisk do konfiguracji połączenia, chociaż nie wyobrażam
        //       sobie, żeby przychodniowa "Pani z dziekanatu" musiała wpisywać localhost:3306+login+hasło
        //       za każdym razem jak przychodzi do pracy. Póki co, dane są sztywno wpisane tutaj.
        public void OpenDatabaseConnection()
        {
            String server = "localhost";
            String port = "3306";
            String database = "medapp";
            String username = "root";
            String password = "mathaliel";
            String connectionString = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=" + server + ";PORT=" + port +
                                      ";DATABASE=" + database + ";UID=" + username + ";PWD=" + password +
                                      ";OPTION=3;charset=utf8";

            m_ODBCConnection = new System.Data.Odbc.OdbcConnection(connectionString);

            try
            {
                m_ODBCConnection.Open();
            }
            catch (System.Data.Odbc.OdbcException Ex)
            {
                System.Windows.Forms.MessageBox.Show("Połączenie z bazą danych nie powiodło się.\n\nPowód:\n" + Ex.Message,
                    "Błąd w połączeniu z bazą danych",
                    System.Windows.Forms.MessageBoxButtons.OK,
                    System.Windows.Forms.MessageBoxIcon.Error);
            }
        }

        public static string MySqlEscape(string usString)
        {
            if (usString == null)
            {
                return null;
            }
            return System.Text.RegularExpressions.Regex.Replace(usString, @"[\r\n\x00\x1a\\'""]", @"\$0");
        }

        public bool IsConnectionOpen()
        {
            return m_ODBCConnection.State == System.Data.ConnectionState.Open;
        }

        public System.Data.Odbc.OdbcDataReader ExecuteQuery(String connStr)
        {
            m_ODBCCommand = new System.Data.Odbc.OdbcCommand(connStr, m_ODBCConnection);
            m_ODBCResult = m_ODBCCommand.ExecuteReader();

            return m_ODBCResult;
        }

        public int ExecuteStmt(String connStr)
        {
            m_ODBCCommand = new System.Data.Odbc.OdbcCommand(connStr, m_ODBCConnection);
            return m_ODBCCommand.ExecuteNonQuery();
        }
    }
}
